package com.cheng.learn.leetcode;

import java.util.HashSet;

/**
 * @description: 寻找快乐数，乐扣第202算法题
 * @author: ChengHaiZhu
 * @create: 2021-03-20 23:34
 **/
public class HappyNumber202 {

    /**
     * 判断一个数是不是快乐数
     * @param n
     * @return
     */
    public boolean isHappy(int n) {
        HashSet<Integer> set = new HashSet<>();
        while(n > 1){
            // 先得到第一个平方和
            n = getNext(n);
            // 判断是否循环，如果发生循环，直接返回false
            if(set.contains(n)){
                return false;
            }
            // 没有循环返回，就将平方和放进set集合中
            set.add(n);
        }
        return true;
    }

    /**
     * 首先要知道下一个数是什么
     * @param n
     * @return
     */
    public int getNext(int n){
        int next = 0;
        while(n > 0){
            // 取各位数
            int num = n % 10;
            // 去掉个位数
            n = n / 10;
            next += num * num;
        }
        return next;
    }

}
